"use strict";
// 泛型  在定义函数 或 类的时候 我们的参数数据类型是无法定义的时候确定，而是到了使用的时候才会确定数据类型。
// 那么这时候就可以泛型来表示 运行时的数据类型.
// function createStringArray(length:number,item:string):string[]{
//     //创建length长度的数组 并填充字符串item
//     // return Array(length).fill(item);
//     let strArray:string[]=[];
//     for(let i=0;i<length;i++){
//         strArray[i]=item;
//     };
//     return strArray;
// }
// function createNumberArray(length:number,item:number):number[]{
//     return Array(length).fill(item);
// }
// createStringArray(3,'a');// ["a","a","a"]
// createNumberArray(3,2);// [2,2,2]
// T就是泛型 类型还不确定，调用函数的时候才会确定
// 在函数名后<T> 表示这是一个泛型函数.
function createArray(length, item) {
    return Array(length).fill(item);
}
//调用函数的时候，第二个参数是字符串. ts推论出 item是string类型
//那么ts也推论出 T = string;  T就是泛型.
createArray(5, 'hello');
let num = createArray(5, 5); //传入的第二个参数5 number ts会推论出 T是number类型
function sayHello(name, msg) {
}
// sayHello('老王',3.14156658);// 错误
// sayHello("老王",'背诵《滕王阁序》'); //错误
sayHello("老王", { text: "背诵《滕王阁序》" });
//10.2 泛型默认值  泛型T的默认类型是string类型
function createArray2(length, item) {
    // return Array(length).fill(item);
    let arr = [];
    for (let i = 0; i < length; i++) {
        arr.push(item);
    }
    return arr;
}
createArray2(8, "字符串");
//调用函数的时候可以手动指定 泛型类型
createArray2(8, "字符串");
let nums = createArray2(9, 9);
